From 8b511900b10c7b1d1ea38cd4fb80db2fd259741b Mon Sep 17 00:00:00 2001 From: robertl Date: Tue, 4 Mar 2003 17:38:53 +0000 Subject: [PATCH] Add leak tools from Parker. --- gpsbabel/tools/cleardebug | 5 +++ gpsbabel/tools/memdebug | 71 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100755 gpsbabel/tools/cleardebug create mode 100755 gpsbabel/tools/memdebug diff --git a/gpsbabel/tools/cleardebug b/gpsbabel/tools/cleardebug new file mode 100755 index 000000000..1ee27e11a --- /dev/null +++ b/gpsbabel/tools/cleardebug @@ -0,0 +1,5 @@ +#!/bin/sh + +rm /tmp/gpsbabel.debug +touch /tmp/gpsbabel.debug + diff --git a/gpsbabel/tools/memdebug b/gpsbabel/tools/memdebug new file mode 100755 index 000000000..3a50da20a --- /dev/null +++ b/gpsbabel/tools/memdebug @@ -0,0 +1,71 @@ +#!/usr/bin/perl + +sub alloc { + my $addr = shift; + my $file = shift; + my $line = shift; + + if ( $arena{$addr} ) { + ($ofile,$oline) = @{$arena{$addr}}; + print( "duplicate allocation $addr at $file $line\n allocated at $ofile $oline\n" ); + } + $arena{$addr} = [$file,$line]; +} + +sub free { + my $addr = shift; + my $file = shift; + my $line = shift; + + if ( $arena{$addr} ) { + $freed{$addr} = [$arena{$addr}->[0], $arena{$addr}->[1], $file, $line]; + delete $arena{$addr}; + } + else { + if ($freed{$addr}) { + ($afile,$aline,$ffile,$fline) = @{$freed{$addr}}; + print( "double free $addr at $file $line\n allocated at $afile $aline\n last freed at $ffile $fline\n" ); + } + else { + print( "freeing unallocated $addr at $file $line\n" ); + } + } +} + +sub unfreed { + for $addr (keys %arena) { + ($file,$line)=@{$arena{$addr}}; + print( "unfreed $addr allocated at $file $line\n" ); + } + undef %arena; + undef %freed; +} + +open(FILE, ") { + chomp; + @args = split(', ',$_); + if ($args[0] eq 'malloc') { + &alloc($args[1], $args[3], $args[4]); + } + if ($args[0] eq 'calloc') { + &alloc($args[1], $args[4], $args[5]); + } + if ($args[0] eq 'strdup') { + &alloc($args[1], $args[3], $args[4]); + } + if ($args[0] eq 'realloc') { + &free($args[2], $args[4], $args[5]); + &alloc($args[1], $args[4], $args[5]); + } + if ($args[0] eq 'free') { + &free($args[1], $args[2], $args[3]); + } + if ($args[0] =~ m/^command/) { + &unfreed; + print "$args[0]\n"; + } +} +&unfreed; +close(FILE); -- 2.30.2